package hos.java.util;

/**
 * <p>Title: AirUtils </p>
 * <p>Description:  </p>
 * <p>Company: www.mapuni.com </p>
 *
 * @author : 蔡俊峰
 * @version : 1.0
 * @date : 2022/9/13 20:18
 */
public class AirUtils {

    public static boolean isNull(Object object) {
        if (AnyUtils.isEmpty(object)) {
            return true;
        }
        if (object instanceof String && (StringUtils.equals((CharSequence) object, "-")
                || StringUtils.isEmpty((CharSequence) object))) {
            return true;
        }
        if (object instanceof Integer && (((Integer) object) == -1 || ((Integer) object) == -99 || ((Integer) object) == -999)) {
            return true;
        }
        if (object instanceof Long && (((Long) object) == -1 || ((Long) object) == -99 || ((Long) object) == -999)) {
            return true;
        }
        if (object instanceof Double && (((Double) object) == -1.0 || ((Double) object) == -99.0 || ((Double) object) == -999.0)) {
            return true;
        }
        if (object instanceof Float && (((Float) object) == -1.0 || ((Float) object) == -99.0 || ((Float) object) == -999.0)) {
            return true;
        }
        return false;
    }

    //<editor-fold desc="Text">
    public static String pm25() {
        return "PM<sub><small><small>2.5</small></small></sub>";
    }

    public static String pm10() {
        return "PM<sub><small><small>10</small></small></sub>";
    }

    public static String o3() {
        return "O<sub><small><small>3</small></small></sub>";
    }

    public static String VOCS() {
        return "VOC<sub><small><small>s</small></small></sub>";
    }

    public static String NH3() {
        return "NH<sub><small><small>3</small></small></sub>";
    }

    public static String NOX() {
        return "NO<sub><small><small>x</small></small></sub>";
    }

    public static String NO2() {
        return "NO<sub><small><small>2</small></small></sub>";
    }

    public static String SO2() {
        return "SO<sub><small><small>2</small></small></sub>";
    }

    /**
     * 处理监测因子
     *
     * @param factor
     * @return
     */
    public static String convert(String factor) {
        if (factor == null || StringUtils.isEmpty(factor)) {
            return "--";
        }
        return factor.replaceAll("null", "--").replaceAll("无", "--")
                .replaceAll("PM25", " PM<sub><small><small>2.5</small></small></sub>")
                .replaceAll("PM2.5", " PM<sub><small><small>2.5</small></small></sub>")
                .replaceAll("PM₂.₅", " PM<sub><small><small>2.5</small></small></sub>")
                .replaceAll("pm25", " PM<sub><small><small>2.5</small></small></sub>")
                .replaceAll("PM10", "PM<sub><small><small>10</small></small></sub>")
                .replaceAll("pm10", "PM<sub><small><small>10</small></small></sub>")
                .replaceAll("PM₁₀", "PM<sub><small><small>10</small></small></sub>")
                .replaceAll("O31H", "O<sub><small><small>3</small></small></sub>")
                .replaceAll("O31", "O<sub><small><small>3</small></small></sub>")
                .replaceAll("O3-1H", "O<sub><small><small>3</small></small></sub>")
                .replaceAll("O3-1", "O<sub><small><small>3</small></small></sub>")
                .replaceAll("O38H", "O<sub><small><small>3</small></small></sub>_8h")
                .replaceAll("O38", "O<sub><small><small>3</small></small></sub>_8h")
                .replaceAll("O3-8", "O<sub><small><small>3</small></small></sub>_8h")
                .replaceAll("O38", "O<sub><small><small>3</small></small></sub>_8h")
                .replaceAll("O3", "O<sub><small><small>3</small></small></sub>")
                .replaceAll("o3", "O<sub><small><small>3</small></small></sub>")
                .replaceAll("O₃", "O<sub><small><small>3</small></small></sub>")
                .replaceAll("VOCS", "VOC<sub><small><small>s</small></small></sub>")
                .replaceAll("NH3", "NH<sub><small><small>3</small></small></sub>")
                .replaceAll("NOX", "NO<sub><small><small>x</small></small></sub>")
                .replaceAll("NO2", "NO<sub><small><small>2</small></small></sub>")
                .replaceAll("no2", "NO<sub><small><small>2</small></small></sub>")
                .replaceAll("NO₂", "NO<sub><small><small>2</small></small></sub>")
                .replaceAll("SO2", "SO<sub><small><small>2</small></small></sub>")
                .replaceAll("so2", "SO<sub><small><small>2</small></small></sub>")
                .replaceAll("SO₂", "SO<sub><small><small>2</small></small></sub>");
    }

    public static String use(String factor) {
        if (factor == null || StringUtils.isEmpty(factor)) {
            return "";
        }
        return factor.replaceAll("--", "")
                .replaceAll("-", "")
                .replaceAll("PM2.5", "PM25")
                .replaceAll("PM<sub><small><small>2.5</small></small></sub>", "PM25")
                .replaceAll(" PM<sub><small><small>2.5</small></small></sub>", "PM25")
                .replaceAll(" PM<sub><small><small>25</small></small></sub>", "PM25")
                .replaceAll("PM<sub><small><small>10</small></small></sub>", "PM10")
                .replaceAll("PM₂.₅", "PM25")
                .replaceAll("PM₁₀", "PM10")
                .replaceAll("O₃", "O3")
                .replaceAll("SO₂", "SO2")
                .replaceAll("NO₂", "NO2")
                .replaceAll("pm25", "PM25")
                .replaceAll("pm10", "PM10")
                .replaceAll("tsp", "TSP")
                .replaceAll("so2", "SO2")
                .replaceAll("no2", "NO2")
                .replaceAll("co", "CO")
                .replaceAll("o3", "O3")
                .replaceAll("aqi", "AQI")
                .replaceAll("O<sub><small><small>3</small></small></sub>", "O3")
                .replaceAll("O<sub><small><small>3</small></small></sub>_8h", "O38H")
                .replaceAll("VOC<sub><small><small>s</small></small></sub>", "VOCS")
                .replaceAll("NH<sub><small><small>3</small></small></sub>", "NH3")
                .replaceAll("NO<sub><small><small>x</small></small></sub>", "NOX")
                .replaceAll("NO<sub><small><small>2</small></small></sub>", "NO2")
                .replaceAll("SO<sub><small><small>2</small></small></sub>", "SO2");
    }
    //</editor-fold>

    //<editor-fold desc="Level">
    /**
     * 根据等级或空气质量的背景
     *
     * @param level 等级
     * @return 资源ID
     */
    public static String getTextLevel(Integer level) {
        if (level == null) {
            return "--";
        }
        if (level == 1) {
            return "优";
        } else if (level == 2) {
            return "良";
        } else if (level == 3) {
            return "轻度";
        } else if (level == 4) {
            return "中度";
        } else if (level == 5) {
            return "重度";
        } else if (level == 6) {
            return "严重";
        }
        return "--";
    }

    /**
     * 获取空气质量 AQI 的等级
     *
     * @param value 空气质量的数据
     * @return 等级
     */
    public static int getAQILevel(int value) {
        if (value >= 0 && value <= 50) {
            return 1;
        } else if (value > 50 && value <= 100) {
            return 2;
        } else if (value > 100 && value <= 150) {
            return 3;
        } else if (value > 150 && value <= 200) {
            return 4;
        } else if (value > 200 && value <= 300) {
            return 5;
        } else if (value > 300) {
            return 6;
        }
        return 7;
    }

    /**
     * 获取空气质量 PM25 的等级
     *
     * @param value 空气质量的数据
     * @return 等级
     */
    public static int getPM25Level(double value) {
        if (value > 0 && value <= 35) {
            return 1;
        } else if (value > 35 && value <= 75) {
            return 2;
        } else if (value > 75 && value <= 115) {
            return 3;
        } else if (value > 115 && value <= 150) {
            return 4;
        } else if (value > 150 && value <= 250) {
            return 5;
        } else if (value > 250) {
            return 6;
        }
        return 7;
    }

    /**
     * 获取空气质量 PM10 的等级
     *
     * @param value 空气质量的数据
     * @return 等级
     */
    public static int getPM10Level(double value) {
        if (value > 0 && value <= 50) {
            return 1;
        } else if (value > 50 && value <= 150) {
            return 2;
        } else if (value > 150 && value <= 250) {
            return 3;
        } else if (value > 250 && value <= 350) {
            return 4;
        } else if (value > 350 && value <= 420) {
            return 5;
        } else if (value > 420) {
            return 6;
        }
        return 7;
    }

    /**
     * 获取空气质量 SO2 的等级
     *
     * @param value 空气质量的数据
     * @return 等级
     */
    public static int getSO2Level(double value) {
        if (value > 0 && value <= 150) {
            return 1;
        } else if (value > 150 && value <= 500) {
            return 2;
        } else if (value > 500 && value <= 650) {
            return 3;
        } else if (value == -1) {
            return 4;
        } else if (value > 650) {
            return 5;
        }
        return 7;
    }

    /**
     * 获取空气质量 NO2 的等级
     *
     * @param value 空气质量的数据
     * @return 等级
     */
    public static int getNO2Level(double value) {
        if (value > 0 && value <= 100) {
            return 1;
        } else if (value > 100 && value <= 200) {
            return 2;
        } else if (value > 200 && value <= 700) {
            return 3;
        } else if (value > 700 && value <= 1200) {
            return 4;
        } else if (value > 1200 && value <= 2340) {
            return 5;
        } else if (value > 2340) {
            return 6;
        }
        return 7;
    }

    /**
     * 获取空气质量 CO 的等级
     *
     * @param value 空气质量的数据
     * @return 等级
     */
    public static int getCOLevel(double value) {
        if (value > 0 && value <= 5) {
            return 1;
        } else if (value > 5 && value <= 10) {
            return 2;
        } else if (value > 10 && value <= 35) {
            return 3;
        } else if (value > 35 && value <= 60) {
            return 4;
        } else if (value > 60 && value <= 90) {
            return 5;
        } else if (value > 90) {
            return 6;
        }
        return 7;
    }

    /**
     * 获取空气质量 O3One 的等级 1小时
     *
     * @param value 空气质量的数据
     * @return 等级
     */
    public static int getO3OneLevel(double value) {
        if (value > 0 && value <= 160) {
            return 1;
        } else if (value > 160 && value <= 200) {
            return 2;
        } else if (value > 200 && value <= 300) {
            return 3;
        } else if (value > 300 && value <= 400) {
            return 4;
        } else if (value > 400 && value <= 800) {
            return 5;
        } else if (value > 800) {
            return 6;
        }
        return 7;
    }

    /**
     * 获取空气质量 O3Eight 的等级 8小时
     *
     * @param value 空气质量的数据
     * @return 等级
     */
    public static int getO3EightLevel(double value) {
        if (value > 0 && value <= 100) {
            return 1;
        } else if (value > 100 && value <= 160) {
            return 2;
        } else if (value > 160 && value <= 215) {
            return 3;
        } else if (value > 215 && value <= 265) {
            return 4;
        } else if (value > 265) {
            return 5;
        } else if (value == -2) {
            return 6;
        }
        return 7;
    }


    /**
     * 获取空气质量 PM25 的等级
     *
     * @param value 空气质量的数据
     * @return 等级
     */
    public static int getPM25Level(int value) {
        if (value > 0 && value <= 35) {
            return 1;
        } else if (value > 35 && value <= 75) {
            return 2;
        } else if (value > 75 && value <= 115) {
            return 3;
        } else if (value > 115 && value <= 150) {
            return 4;
        } else if (value > 150 && value <= 250) {
            return 5;
        } else if (value > 250) {
            return 6;
        }
        return 7;
    }

    /**
     * 获取空气质量 PM10 的等级
     *
     * @param value 空气质量的数据
     * @return 等级
     */
    public static int getPM10Level(int value) {
        if (value > 0 && value <= 50) {
            return 1;
        } else if (value > 50 && value <= 150) {
            return 2;
        } else if (value > 150 && value <= 250) {
            return 3;
        } else if (value > 250 && value <= 350) {
            return 4;
        } else if (value > 350 && value <= 420) {
            return 5;
        } else if (value > 420) {
            return 6;
        }
        return 7;
    }

    /**
     * 获取空气质量 SO2 的等级
     *
     * @param value 空气质量的数据
     * @return 等级
     */
    public static int getSO2Level(int value) {
        if (value > 0 && value <= 150) {
            return 1;
        } else if (value > 150 && value <= 500) {
            return 2;
        } else if (value > 500 && value <= 650) {
            return 3;
        } else if (value == -1) {
            return 4;
        } else if (value > 650) {
            return 5;
        }
        return 7;
    }

    /**
     * 获取空气质量 NO2 的等级
     *
     * @param value 空气质量的数据
     * @return 等级
     */
    public static int getNO2Level(int value) {
        if (value > 0 && value <= 100) {
            return 1;
        } else if (value > 100 && value <= 200) {
            return 2;
        } else if (value > 200 && value <= 700) {
            return 3;
        } else if (value > 700 && value <= 1200) {
            return 4;
        } else if (value > 1200 && value <= 2340) {
            return 5;
        } else if (value > 2340) {
            return 6;
        }
        return 7;
    }

    /**
     * 获取空气质量 CO 的等级
     *
     * @param value 空气质量的数据
     * @return 等级
     */
    public static int getCOLevel(int value) {
        if (value > 0 && value <= 5) {
            return 1;
        } else if (value > 5 && value <= 10) {
            return 2;
        } else if (value > 10 && value <= 35) {
            return 3;
        } else if (value > 35 && value <= 60) {
            return 4;
        } else if (value > 60 && value <= 90) {
            return 5;
        } else if (value > 90) {
            return 6;
        }
        return 7;
    }

    /**
     * 获取空气质量 O3One 的等级 1小时
     *
     * @param value 空气质量的数据
     * @return 等级
     */
    public static int getO3OneLevel(int value) {
        if (value > 0 && value <= 160) {
            return 1;
        } else if (value > 160 && value <= 200) {
            return 2;
        } else if (value > 200 && value <= 300) {
            return 3;
        } else if (value > 300 && value <= 400) {
            return 4;
        } else if (value > 400 && value <= 800) {
            return 5;
        } else if (value > 800) {
            return 6;
        }
        return 7;
    }

    /**
     * 获取空气质量 O3Eight 的等级 8小时
     *
     * @param value 空气质量的数据
     * @return 等级
     */
    public static int getO3EightLevel(int value) {
        if (value > 0 && value <= 100) {
            return 1;
        } else if (value > 100 && value <= 160) {
            return 2;
        } else if (value > 160 && value <= 215) {
            return 3;
        } else if (value > 215 && value <= 265) {
            return 4;
        } else if (value > 265) {
            return 5;
        } else if (value == -2) {
            return 6;
        }
        return 7;
    }
    //</editor-fold>

    /**
     * 根据等级或空气质量的背景
     *
     * @param level 等级
     * @return 资源ID
     */
    public static String getColor(Integer level) {
        if (level == null) {
            return "#39b711";
        }
        if (level == 1) {
            return "#39b711";
        } else if (level == 2) {
            return "#fed034";
        } else if (level == 3) {
            return "#ff7e00";
        } else if (level == 4) {
            return "#fc0d1b";
        } else if (level == 5) {
            return "#97084c";
        } else if (level == 6) {
            return "#500017";
        }
        return "#39b711";
    }
}
